package com.sx.pipeline.ui.chat.detail

import android.content.Context
import android.text.TextUtils
import android.view.View
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.ToastUtils
import com.gyf.immersionbar.ImmersionBar
import com.hjq.bar.OnTitleBarListener
import com.hjq.bar.TitleBar
import com.sx.pipeline.BR
import com.sx.pipeline.R
import com.sx.pipeline.app.base.CYDataBindingBaseActivity
import com.sx.pipeline.app.config.IntentKey
import com.sx.pipeline.arouth.RoutePath
import com.sx.pipeline.databinding.ActivityConversationBinding
import com.sx.pipeline.ui.chat.ChatVM
import io.rong.imkit.config.ConversationClickListener
import io.rong.imkit.config.RongConfigCenter
import io.rong.imkit.conversation.ConversationFragment
import io.rong.imkit.userinfo.RongUserInfoManager
import io.rong.imlib.model.Conversation
import io.rong.imlib.model.Message
import io.rong.imlib.model.UserInfo


/**
 * @Author: YY
 * @Date: 2022/4/5
 * @Description: 会话详情
 */
@Route(path = RoutePath.Chat.CHAT_DETAIL)
class ConversationActivity : CYDataBindingBaseActivity<ActivityConversationBinding, ChatVM>(
    R.layout.activity_conversation
),View.OnClickListener {
    private var fragment: ConversationFragment? = null
    private var mConversationType //判断聊天类型
            : Conversation.ConversationType? = null

    private var mTargetId=""
    override fun initData() {
        // 设置状态栏字体颜色
        ImmersionBar.with(this)
            .fitsSystemWindows(true)
            .statusBarColor(R.color.color_0188ff)
            .statusBarDarkFont(false)
            .init()
        mBinding.setVariable(BR.onClick, this)
        if (this.intent != null) {
            mTargetId = this.intent.getStringExtra("targetId")!!
            val type = this.intent.getStringExtra("ConversationType")
            if (TextUtils.isEmpty(type)) {
                return
            }
            mConversationType = Conversation.ConversationType.valueOf(type!!.uppercase())
        }
        setTitle()
        mBinding.titleBar.setOnTitleBarListener(object: OnTitleBarListener{
            override fun onLeftClick(titleBar: TitleBar?) {
                super.onLeftClick(titleBar)
                finish()
            }

            override fun onRightClick(titleBar: TitleBar?) {
                super.onRightClick(titleBar)
                ARouter.getInstance().build(RoutePath.Chat.CHAT_GROUP_MANAGER)
                    .withString("id",mTargetId)
                    .navigation()
            }
        })
        initConversationFragment()
    }

    private fun setTitle() {
        if (!TextUtils.isEmpty(mTargetId) && mConversationType == Conversation.ConversationType.GROUP) {
            val group = RongUserInfoManager.getInstance().getGroupInfo(mTargetId)
            if(group!=null){
                mBinding.titleBar.title=group.name
                mBinding.titleBar.setRightIcon(R.mipmap.ic_more)
            }
        } else {
            val userInfo = RongUserInfoManager.getInstance().getUserInfo(mTargetId)
            if(userInfo!=null){
                mBinding.titleBar.title=userInfo.name
            }
        }
    }



    override fun initListener() {
        super.initListener()
        RongConfigCenter.conversationConfig().setShowMoreClickAction(true);
        RongConfigCenter.conversationConfig().conversationClickListener =
            object : ConversationClickListener {
                /**
                 * 用户头像点击事件
                 *
                 * @param context          上下文。
                 * @param conversationType 会话类型。
                 * @param user             被点击的用户的信息。
                 * @param targetId         会话 id
                 * @return true 拦截事件; false 不拦截, 默认执行 SDK 内部逻辑
                 */
                override fun onUserPortraitClick(
                    context: Context?,
                    conversationType: Conversation.ConversationType?,
                    user: UserInfo?,
                    targetId: String?
                ): Boolean {
                    user?.userId?.toInt()?.let {
                        ARouter.getInstance().build(RoutePath.Chat.CHAT_PERSONAL)
                            .withInt(IntentKey.ID, it).navigation()
                    }
                    return false
                }

                /**
                 * 用户头像长按事件
                 *
                 * @param context          上下文。
                 * @param conversationType 会话类型。
                 * @param user             被点击的用户的信息。
                 * @param targetId         会话 id
                 * @return true 拦截事件; false 不拦截, 默认执行 SDK 内部逻辑
                 */
                override fun onUserPortraitLongClick(
                    context: Context?,
                    conversationType: Conversation.ConversationType?,
                    user: UserInfo?,
                    targetId: String?
                ): Boolean {
                    return false
                }

                /**
                 * 消息点击事件
                 *
                 * @param context 上下文。
                 * @param view    触发点击的 View。
                 * @param message 被点击的消息的实体信息。
                 * @return true 拦截事件; false 不拦截, 默认执行 SDK 内部逻辑
                 */
                override fun onMessageClick(
                    context: Context?,
                    view: View?,
                    message: Message?
                ): Boolean {
                    return false
                }

                /**
                 * 消息长按事件
                 *
                 * @param context 上下文。
                 * @param view    触发点击的 View。
                 * @param message 被点击的消息的实体信息。
                 * @return true 拦截事件; false 不拦截, 默认执行 SDK 内部逻辑
                 */
                override fun onMessageLongClick(
                    context: Context?,
                    view: View?,
                    message: Message?
                ): Boolean {
                    return false
                }

                /**
                 * 消息超链接内容点击事件
                 *
                 * @param context 上下文。
                 * @param link  超链接文本
                 * @param message 被点击的消息的实体信息。
                 * @return true 拦截事件; false 不拦截, 默认执行 SDK 内部逻辑
                 */
                override fun onMessageLinkClick(
                    context: Context?,
                    link: String?,
                    message: Message?
                ): Boolean {
                    return false
                }

                /**
                 * 当点击已读回执状态时执行
                 *
                 * @param context 上下文。
                 * @param message 被点击消息的实体信息。
                 * @return 如果用户自己处理了长按后的逻辑处理，则返回 true，否则返回 false，false 走融云默认处理方式。
                 */
                override fun onReadReceiptStateClick(
                    context: Context?,
                    message: Message?
                ): Boolean {
                    return false
                }
            }


    }

    private fun initConversationFragment() {


        /** 加载会话界面 。 ConversationFragmentEx 继承自 ConversationFragment  */
        val fragmentManager = supportFragmentManager
        val existFragment =
            fragmentManager.findFragmentByTag(ConversationFragment::class.java.canonicalName)
        if (existFragment != null) {
            fragment = existFragment as ConversationFragment
            val transaction = fragmentManager.beginTransaction()
            transaction.show(fragment!!)
            transaction.commitAllowingStateLoss()
        } else {
            fragment = ConversationFragment()
            val transaction = fragmentManager.beginTransaction()
            transaction.add(
                R.id.container_detail, fragment!!, ConversationFragment::class.java.canonicalName
            )
            transaction.commitAllowingStateLoss()
        }
    }

    override fun onClick(v: View?) {
    }

}